If `params` is floating when provided by the caller, and if one of the
early return paths is taken from this function, the call into GIO never
sinks and takes ownership of the `GVariant`, and hence it’s leaked.
Always explicitly sink the input variant as soon as the function is
called, then it can’t be leaked.
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3396>
gpointer user_data)
{
g_autoptr (GTask) task = g_task_new (NULL, cancellable, callback, user_data);
+ g_autoptr (GVariant) params_owned = g_variant_ref_sink (g_steal_pointer (¶ms));
#ifdef HAVE_SYSTEMD
g_autoptr (GDBusConnection) connection = NULL;
"/org/freedesktop/systemd1",
"org.freedesktop.systemd1.Manager",
command,
- params,
+ params_owned,
G_VARIANT_TYPE ("(o)"),
G_DBUS_CALL_FLAGS_NONE,
-1, cancellable,